package com.ly.gof.structure.proxy.dynamic;

import org.springframework.cglib.proxy.Enhancer;

/**
 * @author liuyang
 * @des 由于JDK动态代理必须要求源对象有实现接口，而实际场景中，并不是所有类都有实现接口，因此使用CGLib可以用在未实现接口的类上。
 * @Version 1.0
 * @Date: 21/07/2021 16:46
 */
public class CglibTest {
    public static void main(String[] args) {
        ProxyInterceptor cglibSubjectProxy = new ProxyInterceptor();
        Enhancer enhancer = new Enhancer();
        enhancer.setSuperclass(CglibSubject.class);  // 设置超类，cglib是通过继承来实现的
        enhancer.setCallback(cglibSubjectProxy);

        CglibSubject realSubject = (CglibSubject)enhancer.create();   // 创建代理类
        realSubject.request();
    }
}
